package com.zjcloud.jwgl.service;

import java.util.List;
import com.zjcloud.jwgl.domain.AcScheduleConstraint;

/**
 * 排课约束条件Service接口
 * 
 * @author wxl
 * @date 2024-09-13
 */
public interface IAcScheduleConstraintService {
    /**
     * 查询排课约束条件
     * 
     * @param id 排课约束条件主键
     * @return 排课约束条件
     */
    public AcScheduleConstraint selectAcScheduleConstraintById(Long id);

    /**
     * 查询排课约束条件列表
     * 
     * @param acScheduleConstraint 排课约束条件
     * @return 排课约束条件集合
     */
    public List<AcScheduleConstraint> selectAcScheduleConstraintList(AcScheduleConstraint acScheduleConstraint);

    /**
     * 新增排课约束条件
     * 
     * @param acScheduleConstraint 排课约束条件
     * @return 结果
     */
    public int insertAcScheduleConstraint(AcScheduleConstraint acScheduleConstraint);

    /**
     * 修改排课约束条件
     * 
     * @param acScheduleConstraint 排课约束条件
     * @return 结果
     */
    public int updateAcScheduleConstraint(AcScheduleConstraint acScheduleConstraint);

    /**
     * 批量删除排课约束条件
     * 
     * @param ids 需要删除的排课约束条件主键集合
     * @return 结果
     */
    public int deleteAcScheduleConstraintByIds(Long[] ids);

    /**
     * 删除排课约束条件信息
     * 
     * @param id 排课约束条件主键
     * @return 结果
     */
    public int deleteAcScheduleConstraintById(Long id);
    
    /**
     * 获取指定学期的所有启用约束条件
     * 
     * @param semester 学期
     * @return 约束条件列表
     */
    public List<AcScheduleConstraint> getEnabledConstraints(String semester);
    
    /**
     * 批量更新约束权重
     *
     * @param constraints 约束条件列表
     * @return 更新结果
     */
    public int updateConstraintWeights(List<AcScheduleConstraint> constraints);
    
    /**
     * 批量保存或更新约束权重（如果ID存在则更新，否则创建新记录）
     *
     * @param constraints 约束条件列表
     * @return 保存或更新结果
     */
    public int saveOrUpdateConstraintWeights(List<AcScheduleConstraint> constraints);

    /**
     * 从模板初始化约束条件数据
     *
     * @param templateName 模板名称
     * @param semester 学期
     * @return 初始化结果
     */
    public int initConstraintsFromTemplate(String templateName, String semester);

    /**
     * 应用默认模板到指定学期
     *
     * @param semester 学期
     * @return 应用结果
     */
    public int applyDefaultTemplate(String semester);
}